package Controle;

import util.Constantes;
import java.io.File;

import javax.swing.JOptionPane;

import util.Mensagem;
import Jplay.Animation;
import Jplay.GameImage;
import Jplay.Mouse;
import MotorGrafico.InterfaceTela;
import MotorGrafico.MotorGrafico;
import MotorGrafico.Tabuleiro;

/**
 * Classe respons�vel por controlar o desenhar de todas as imangens da tela de estados.
 * @author Gefersom C. Lima
 *
 */

public class TelaEstados implements InterfaceTela
{
	Animation btnEstado01;
	Animation btnEstado02;
	Animation btnEstado03;
	Animation btnVoltar;
	GameImage imgFundo;
	Mouse mouse;
	Tabuleiro tabuleiro;

	boolean boolVoltar;
	boolean salvar;
	int estadoEscolhido;

	/**
	 * A a��o a ser executada se� a de salvar o estado corrente do jogo.
	 */
	public void setAcaoSalvar() {
		salvar = true;
	}
	
	/**
	 * A a��o a ser executada se� a de carregar um estado salvo do jogo.
	 */	
	public void setAcaoAbrir() {
		salvar = false;
	}

	/**
	 * Carrega os objetos usados na mem�ria.
	 */
	@Override
	public void carregar() {
		btnEstado01 = new Animation(Constantes.IMG_TELA_ESTADO_JOGO_ESTADO_01,2);
		btnEstado02 = new Animation(Constantes.IMG_TELA_ESTADO_JOGO_ESTADO_02,2);
		btnEstado03 = new Animation(Constantes.IMG_TELA_ESTADO_JOGO_ESTADO_03,2);
		btnVoltar = new Animation(Constantes.IMG_TELA_ESTADO_JOGO_BTN_VOLTAR, 2);

		imgFundo = new GameImage(Constantes.IMG_TELA_MENU_FUNDO);

		int y = 140;
		int x = 220;

		btnEstado01.setPosition(x, y);
		btnEstado02.setPosition(x, btnEstado01.y + btnEstado01.height + 4);
		btnEstado03.setPosition(x, btnEstado02.y + btnEstado02.height + 4);
		btnVoltar.setPosition(x, btnEstado03.y + btnEstado03.height + 4);

		imgFundo.setPosition(x - 30, y - 20);

		mouse = MotorGrafico.getInstance().getJanela().getMouse();

		boolVoltar = false;
		boolVoltar = false;
		estadoEscolhido = 0;

		TelaJogo tj = (TelaJogo) MotorGrafico.getInstance().getTela(Constantes.TELA_JOGAR);
		this.tabuleiro = tj.getTabuleiro();
	}

	/**
	 * Descarrega os objetos da mem�ria.
	 */
	@Override
	public void descarregar() {
		// TODO Auto-generated method stub
	}

	/**
	 * Repons�vel por controlar a l�gica da tela de estados.
	 */
	@Override
	public void logica() {
		btnEstado01.setCurrFrame(0);
		btnEstado02.setCurrFrame(0);
		btnEstado03.setCurrFrame(0);
		btnVoltar.setCurrFrame(0);

		if (mouse.isOverObject(btnEstado01)) {
			btnEstado01.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				estadoEscolhido = 1;
		}

		if (mouse.isOverObject(btnEstado02)) {
			btnEstado02.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				estadoEscolhido = 2;
		}

		if (mouse.isOverObject(btnEstado03)) {
			btnEstado03.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				estadoEscolhido = 3;
		}

		if (mouse.isOverObject(btnVoltar)) {
			btnVoltar.setCurrFrame(1);
			if (mouse.isLeftButtonPressed() == true)
				boolVoltar = true;
		}

		if (estadoEscolhido != 0) 
		{
			// Window w = MotorGrafico.getInstance().getJanela();
			String msn = "";

			if (salvar == true)
				msn = "Deseja realmente salvar? \nO estado " + estadoEscolhido+ " ser� sobrescrito.";
			else
				msn = "Deseja realmente restaurar o estado " + estadoEscolhido
						+ "?";

			File arq = new File(Constantes.ARQ_ESTADOS_TABULEIRO+ estadoEscolhido);

			TelaJogo ts = (TelaJogo) MotorGrafico.getInstance().getTela(Constantes.TELA_JOGAR);
			if (salvar == true && Mensagem.mostrarMsnConfirmacao(msn,"Op��es de Estado do Jogo") == JOptionPane.OK_OPTION) 
			{
					ts.getEstado().salvarEstado(estadoEscolhido);
					Mensagem.mostrarMsnInformacao("Estado salvo com sucesso.", "Salvar estado");				
			}
			
			if (salvar == false && Mensagem.mostrarMsnConfirmacao(msn,"Op��es de Estado do Jogo") == JOptionPane.OK_OPTION)					 
			{
				if (arq.exists() == true) 
				{													
					ts.carregarEstadoJogo(estadoEscolhido);
					Mensagem.mostrarMsnInformacao("Estado restaurado com sucesso.","Carregar estado");
				}
				else
				{
					Mensagem.mostrarMsnInformacao("N�o existem informa��es gravadas para o estado "
							+ estadoEscolhido + ".", "Estado vazio.");
				}
			}
			
			boolVoltar = true;

			estadoEscolhido = 0;
		}
	}

	/**
	 * Respons�vel por desenhar as imagens na tela.
	 */
	@Override
	public void desenhar() {
		imgFundo.draw();
		btnEstado01.draw();
		btnEstado02.draw();
		btnEstado03.draw();
		btnVoltar.draw();
	}

	/**
	 * Seta a pr�xima tela a ser executada.
	 */
	@Override
	public void proxTela() {

		if (boolVoltar) {
			MotorGrafico.getInstance().setProxTela(Constantes.TELA_MENU);
			boolVoltar = false;
		}
	}
}
